package wenjun.du.androidart.handler

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_handler.*
import wenjun.du.androidart.R

/**
 * Android中的消息机制
 * Handler:是上层的封装类，底层包括两个重要的类MessageQueue looper
 *
 * 重要的类:looper对象，一个线程只能有一个looper 一个MessageQueue对象,
 * 保障一个线程只有一个looper的类就是ThreadLocal,给当前线程的成员遍历上保存(简单理解为一个hashMap(key=ThreadLocal value=保存的值))设置的值，并且是在线程级别上区分开的
 *
 * 主线程中开启的消息循环：ActivityThread的main方法中
 * 子线程中如果要开启消息循环；也要创建looper  Looper.prepare()
 *
 * Handler:源码理解
 *
 *
 * */
class HandlerActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_handler)
        handler_main.setOnClickListener {
            val sendMessage = Message.obtain()
            sendMessage.what = 1
            Handler(Looper.myLooper()!!) { message ->
                Toast.makeText(this, "message ${message.what}", Toast.LENGTH_SHORT).show()
                false
            }.sendMessage(sendMessage)
        }
    }
}